/**!
 *
 * Uploadifive 文件上传插件工具。
 *
 */

(function ($) {
    /**
     *
     * 我的 Uploadifive 文件上传。
     *
     */
    $.fn.myUploadifive = function (options) {
        // 是否自动上传：true-是；false-否
        options.auto = (($.type(options.auto) === "boolean") ? options.auto : true);
        // 是否允许多选：true-是；false-否
        options.multi = (($.type(options.multi) === "boolean") ? options.multi : false);
        // 宽
        options.width = ($.isNumber(options.width) ? options.width : 100);
        // 高
        options.height = ($.isNumber(options.height) ? options.height : 30);
        // 显示上传队列的节点 ID
        options.queueID = ($.isBlank(options.queueID) ? false : options.queueID);
        // 文件类型
        options.fileType = ($.isBlank(options.fileType) ? false : options.fileType);
        // 按钮文本
        options.buttonText = ($.isBlank(options.buttonText) ? "选择文件" : options.buttonText);
        // 按钮样式
        options.buttonClass = ($.isBlank(options.buttonClass) ? false : options.buttonClass);
        // 文件对象名称
        options.fileObjName = ($.isBlank(options.fileObjName) ? "Filedata" : options.fileObjName);
        // 上传处理脚本，即上传 URL
        options.uploadScript = ($.isBlank(options.uploadScript) ? "uploadifive.php" : options.uploadScript);
        // 文件大小限制
        options.fileSizeLimit = ($.isNumber(options.fileSizeLimit) ? options.fileSizeLimit : 0);
        // 上传完毕是否删除：true-是；false-否
        options.removeCompleted = (($.type(options.removeCompleted) === "boolean") ? options.removeCompleted : true);
        // 如果浏览器不支持 HTML5 API 时触发
        options.onFallback = function () {
            $.toast({
                top: 5,
                msg: "您的浏览器太古老啦，暂不能上传文件，赶快去升级吧！",
                type: "error",
                close: 6000
            });
        };

        // 当前对象
        var $this = this;
        // 获取上传按钮的 jQuery 对象
        var $uploadifiveBtn = null;
        // 一个上传队列中的文件个数
        var queueCount = 0;
        // 文件上传
        var $uploadifive = $this.uploadifive({
            auto: options.auto,
            multi: options.multi,
            width: options.width,
            height: options.height,
            queueID: options.queueID,
            fileType: options.fileType,
            buttonText: options.buttonText,
            buttonClass: options.buttonClass,
            fileObjName: options.fileObjName,
            uploadScript: options.uploadScript,
            fileSizeLimit: options.fileSizeLimit,
            removeCompleted: options.removeCompleted,
            onUpload: function (file) { // 一个文件队列开始上传时执行
                if ($uploadifive != null) {
                    $uploadifive.uploadifiveData.settings.formData.uploadifive = "uploadifive";
                    $uploadifive.uploadifiveData.settings.formData._ = (new Date()).getTime();

                    queueCount = $uploadifive.uploadifiveData.queue.count;
                }

                if ($.isFunction(options.onUploadFn)) {
                    options.onUploadFn(file);
                }
            },
            onUploadFile: function (file) { // 一个文件开始上传时执行
                if ($.isFunction(options.onUploadFileFn)) {
                    options.onUploadFileFn(file);
                }
            },
            onQueueComplete: function () { // 一个文件队列上传完毕时执行
                // true-表示已全部成功上传完毕；false-表示未全部成功上传完毕
                var isAllSuccess = ((queueCount === 0) ? true : false);

                if ($.isFunction(options.onQueueCompleteFn)) {
                    options.onQueueCompleteFn(isAllSuccess);
                }
            },
            onUploadComplete: function (file, data) { // 一个文件上传完毕时执行
                try {
                    if ($.isNotBlank(data)) {
                        data = $.parseJSON(data);

                        if (data.resultCode === 0) {
                            if (queueCount > 0) {
                                queueCount--;
                            }

                            if ($.isFunction(options.onUploadCompleteFn)) {
                                options.onUploadCompleteFn(file, data);
                            }
                        } else {
                            $.toast({
                                top: 5,
                                msg: data.resultMsg,
                                type: "error",
                                close: 6000
                            });
                        }
                    }
                } catch (e) {
                    $.toast({
                        top: 5,
                        msg: "系统繁忙，稍后再试",
                        type: "error",
                        close: 6000
                    });
                }
            }
        });

        // 获取上传按钮的 jQuery 对象
        $uploadifiveBtn = $("#uploadifive-{0}".format($this.attr("id")));
        // 恢复上传按钮的样式
        $uploadifiveBtn.attr("style", "");
        $uploadifiveBtn.removeClass("uploadifive-button");

        // 获取 uploadifive 的内部数据，在这里操作
        if ($uploadifive != null) {
            // 获取 uploadifive 的内部数据
            $uploadifive.uploadifiveData = $uploadifive.data("uploadifive");
        }

        return $uploadifive;
    };
})(jQuery);